package com.ldpp.strategy;

import com.alibaba.fastjson.JSONObject;
import com.ldpp.common.base.TradeStr;
import com.ldpp.entity.TickMin;

import javax.xml.crypto.Data;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @author ：gongtan
 * @date ：Created in 2021/3/18 11:00
 * @description： 标准版本策略实现模板 定义开仓价位 以及开仓时间
 * @modified By：
 */
public class strategy_1 {
    //触发时间
    private String start_time = "2021-03-01 09:00:00";

    //结束时间
    private String close_time = "2021-03-10 23:00:00";

    //交易方向
    private String direction = TradeStr.DIRECTION_0;

    //交易开仓价格
    private double open_price;

    //交易平仓价格
    private double close_price;

    //交易品种
    private String symbol = "RB";

    //递增开仓方式 间隔点位
    private Integer interval_points = 10;

    //递增开仓方式 递增手数
    private Integer interval_volume = 2;

    //初始开仓手数
    private Integer volume = 5;

    //记录上个开仓点位
    private Integer over_price;

    //记录总手数
    private Integer volume_total = 0;

    /**
     * 需要消费的数据 处理逻辑
     * @param tickMin
     * @return
     */
    public JSONObject strategyHandler(TickMin tickMin){
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        //获取时间

        if (tickMin.getCreateTime().format(dateTimeFormatter).equals(start_time)) {
            volume_total = volume + volume_total;
            this.over_price = tickMin.getClose();
            //如果为策略开始时间 则进行开仓
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("direction",direction);
            jsonObject.put("price",tickMin.getClose());
            jsonObject.put("symbol",tickMin.getWindCode());
            jsonObject.put("offset",TradeStr.OFFSWTET_0);
            jsonObject.put("volume",volume);
            jsonObject.put("tradeTime",tickMin.getCreateTime());
            return jsonObject;
        }
        if(direction.equals(TradeStr.DIRECTION_0)){

            //多
            Integer checkPrice = over_price - 10;
            if(checkPrice.equals(tickMin.getClose())){
                volume_total = interval_volume + volume_total;
                //开仓
                this.over_price = tickMin.getClose();
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("direction",direction);
                jsonObject.put("price",tickMin.getClose());
                jsonObject.put("symbol",tickMin.getWindCode());
                jsonObject.put("offset",TradeStr.OFFSWTET_0);
                jsonObject.put("volume",interval_volume);
                jsonObject.put("tradeTime",tickMin.getCreateTime().format(dateTimeFormatter));
                return jsonObject;
            }
        }else{
            //空
            Integer checkPrice = over_price + 10;
            if(checkPrice.equals(tickMin.getClose())){
                volume_total = interval_volume + volume_total;
                //开仓
                this.over_price = tickMin.getClose();
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("direction",direction);
                jsonObject.put("price",tickMin.getClose());
                jsonObject.put("symbol",tickMin.getWindCode());
                jsonObject.put("offset",TradeStr.OFFSWTET_0);
                jsonObject.put("volume",interval_volume);
                jsonObject.put("tradeTime",tickMin.getCreateTime().format(dateTimeFormatter));
                return jsonObject;
            }
        }
        if(tickMin.getCreateTime().format(dateTimeFormatter).equals(close_time)){
            //平仓
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("direction",TradeStr.DIRECTION_1);
            jsonObject.put("price",tickMin.getClose());
            jsonObject.put("symbol",tickMin.getWindCode());
            jsonObject.put("offset",TradeStr.OFFSWTET_1);
            jsonObject.put("volume",volume_total);
            jsonObject.put("tradeTime",tickMin.getCreateTime().format(dateTimeFormatter));
            return jsonObject;
        }

        return null;
    }


}
